package com.tom.architect.day16.simple2;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/**
 * Added by Tom on 2023/12/15.
 * 银行办理业务 - 动态代理 - InvocationHandler
 */
public class BankInvocationHandler implements InvocationHandler {
    // 被代理的对象（执行对象）
    private Object mObject;

    public BankInvocationHandler(Object object) {
        this.mObject = object;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        // 执行的方法：目标接口调用的方法都会来到这里面。
        // System.out.println("method:" + method.getName()); // 打印：method:applyBank

        System.out.println("开始受理业务");
        // 调用 被代理对象Man 的方法： man里面的applyBank方法或 lostBank方法 ......
        Object voidObject = method.invoke(mObject, args); // 反射执行方法
        System.out.println("结束受理业务");
        return voidObject;
    }

}
